// 导入axios
import axios from 'axios'
import router from '@/router'
import { ElMessage } from 'element-plus'

const config = {
  // baseURL 将自动加在 url`前面，除非 url 是一个绝对 URL。
  // 它可以通过设置一个 baseURL 便于为 axios 实例的方法传递相对 URL
  baseURL: '/api',
  // timeout设置一个请求超时时间，如果请求时间超过了timeout，请求将被中断，单位为毫秒（ms）
  timeout: 60000,
  // headers是被发送的自定义请求头，请求头内容需要根据后端要求去设置，这里我们使用本项目请求头。
  headers: {
    get: {
      'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
    },
    post: {
      'Content-Type': 'application/json;charset=utf-8'

    }
  },
  withCredentials: true,
  transformRequest: [(data) => {
    data = JSON.stringify(data)
    return data
  }],
  validateStatus () {
    // 使用async-await，处理reject情况较为繁琐，所以全部返回resolve，在业务代码中处理异常
    return true
  },
  transformResponse: [(data) => {
    if (data.startsWith('{')) {
      data = JSON.parse(data)
    }
    return data
  }]
}
const api = axios.create(config)

// 请求拦截
api.interceptors.request.use((conf) => {
  // 添加token
  const token = localStorage.getItem('mkcsa-token')
  if (token) {
    conf.headers.Authorization = 'Bearer ' + token
  }
  return conf
})
// 响应拦截
api.interceptors.response.use(response => {
  if (response.status === 401) {
    ElMessage({
      showClose: true,
      message: '登陆过期，请重新登陆',
      type: 'error',
      offset: 90
    })
    localStorage.removeItem('mkcsa-token')
    router.push('/login')
  }
  return response
})

export function get (url) {
  return api.get(url)
}

export function post (url, params) {
  return api.post(url, params)
}

export function uploadImg (url, params) {
  return api.post(url, params, {
    'Content-Type': 'multipart/form-data',
    transformRequest: [data => data]
  })
}

export function del (url) {
  return api.delete(url)
}

export function put (url, params) {
  return api.put(url, params)
}
